package com.sumainfor.pc.epc.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sumainfor.common.entity.DataFilterEntity;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @Author PuaChen
 * @Create 2018-11-08 14:55
 */
public interface BuyerManageMapper {

    /**
     * 根据条件去查询 列表信息
     *
     * @return
     */
    IPage<Map<String, Object>> getBuyerList(Page page, @Param("param") Map<String, Object> param);


    /**
     * 获取已经完成的采购单的详情
     *
     * @param buyId
     * @param ifOutType 采购类型 直接出库还是采购
     * @return
     */
    List<Map<String, Object>> getBuyerDetailAsWxDone(@Param("buyId") String buyId, @Param("ifOutType") Integer ifOutType);


    /**
     * 获取装修采购中的详细信息中的商品的列表 Tab物品清单
     *
     * @param buyId
     * @return
     */
    List<Map<String, Object>> getBuyerDetailAsWxIng(String buyId);

    /**
     * 根据商品的名称 和规格的名称去查询 商品的总库存
     *
     * @param shopName
     * @param speName
     * @return
     */
    Integer getStockSum(@Param("shopName") String shopName, @Param("speName") String speName);


    /**
     * 根据采购单详表的ID去查询出库的日志
     *
     * @param id
     * @return
     */
    List<Map<String, Object>> selectBuyerInfoLog(Integer id);

    /**
     * 通过规格的编号获得这个所有的商品名称
     * 规格的编号
     *
     * @return
     */
    List<Map<String, Object>> getBrandString(String speId);

    /**
     * 通过规格的ids 查询所有的型号信息
     *
     * @param ids
     * @return
     */
    List<Map<String, Object>> getTypeByComIds(@Param("ids") List<String> ids);

    /**
     * 装修计划才有的
     * 查询出来 这个商品的所属房源列表的详细信息
     *
     * @return
     */
    List<Map<String, Object>> getShopRelateHousingForZx(@Param("speId") String speId, @Param("buyId") String buyId);


    /**
     * 根据供应商的ID 去查询供应商的所有的信息
     *
     * @param suId
     * @return
     */
    Map<String, Object> getSupplierById(String suId);

    /**
     * 根据采购单主表的编号 查出来所有的详表的自增id
     *
     * @param buyerId
     * @return
     */
    List<Integer> selectBuyerInIdByBuyerId(String buyerId);

    /**
     * 更新采购单主表信息
     *
     * @param params
     * @return
     */
    int updateBuyerMain(Map<String, Object> params);

    /**
     * 插入采购单详情表
     *
     * @param params
     * @return
     */
    int insertBuyerInfo(Map<String, Object> params);

    /**
     * 更新详表状态需要采购的数据 为已采购
     *
     * @param ids
     * @return
     */
    int updateBuyerInfoStateForDone(@Param("ids") List<Integer> ids);

    /**
     * 更新详表状态需要出库的数据 进行出库的操作
     *
     * @param id
     * @param count
     * @param buyId
     * @param isDone
     * @param comId
     * @param supId
     * @param moId
     * @param speId
     * @return
     */
    int updateBuyerInfoOutShop(@Param("id") Integer id, @Param("count") Integer count, @Param("buyId") String buyId, @Param("isDone") Boolean isDone, @Param("comId") String comId, @Param("speId") String speId, @Param("moId") String moId, @Param("supId") String supId);

    /**
     * 查询出来给定的ID集合中 去装修采购单详表查询出来所有的需要入库的行
     *
     * @param ids
     * @return
     */
    List<Map<String, Object>> selectBuyerInfoZxForPutStoreData(@Param("ids") List<Integer> ids);

    /**
     * 获得采购详表中 没有完成采购状态的数量
     *
     * @param buyId
     * @return
     */
    int selectUnDoneCount(String buyId);

    /**
     * 插入一个采购单主表 类型为备件采购单
     *
     * @param params
     * @return
     */
    int insertBuyerStandbyMain(Map<String, Object> params);

    /**
     * 撤回备件采购单
     * 功能：
     * 删除备件采购单
     *
     * @param buyId
     * @return
     */
    int withdrawStandbyOrder(String buyId);

    /**
     * 修改采购单详细表
     *
     * @param params
     * @return
     */
    int updateBuyerInfo(Map<String, Object> params);

    /**
     * 更新商品-型号的信息
     *
     * @param params
     * @return
     */
    int updateShopForMo(Map<String, Object> params);

    /**
     * 通过采购详情表的自整ID查询这个详表的记录
     *
     * @param id
     * @return
     */
    Map<String, Object> selectBuyerInfoById(String id);

    /**
     * 库存入库的记录写入
     *
     * @param params
     * @return
     */
    int insertStoreInPutLog(Map<String, Object> params);

    /**
     * 根据型号表的型号编号 查询型号信息
     *
     * @param moId
     * @return
     */
    Map<String, Object> selectComMoOne(String moId);

    /**
     * 查询装修计划详表的信息
     *
     * @param planId
     * @return
     */
    List<Map<String, Object>> selectPlanInfo(String planId);

    /**
     * 通过采购单主编号获得主表的数据
     *
     * @param buyerId
     * @return
     */
    Map<String, Object> getBuyerMainById(String buyerId);

    /**
     * 获取商品的编号 通过名称
     *
     * @param name
     * @return
     */
    String getShopIdByShopName(String name);

    /**
     * 计算采购的总价
     *
     * @param buyerId
     * @return
     */
    BigDecimal getBuyerInfoSumPrice(String buyerId);

    /**
     * 计算采购的总价 备件采购
     *
     * @param buyerId
     * @return
     */
    BigDecimal getBuyerInfoSumPriceForStock(String buyerId);

    /**
     * 获得采购单详表数据 只是得到需要进行采购的数据
     *
     * @param buyerId
     * @return
     */
    List<Map<String, Object>> selectBuyerInfos(String buyerId);

    /**
     * 根据采购编号 获得所有的详表信息 All  所有的
     *
     * @param buyerId
     * @return
     */
    List<Map<String, Object>> selectBuyerInfoList(String buyerId);

    /**
     * 获得采购清单Tab的列表数据
     *
     * @param buyerId
     * @return
     */
    List<Map<String, Object>> selectBuyerOrderTab(String buyerId);

    /**
     * 插入装修采购单详表出库记录
     *
     * @param params
     * @return
     */
    int insertBuyerInfoLog(Map<String, Object> params);

    /**
     * 通过商品和规格和型号编号 查询型号
     *
     * @param comId
     * @param speId
     * @param moId
     * @return
     */
    Map<String, Object> getShopMoForNumber(@Param("comId") String comId, @Param("speId") String speId, @Param("moId") String moId);

    /**
     * 通过采购单中的装修计划编号 去查询出房源配置详表的信息
     *
     * @param sourceId 装修计划编号
     * @return
     */
    List<Map<String, Object>> selectHousingConfigList(String sourceId);

    /**
     * 更新 房源配置详表的房源商品数据
     *
     * @param params
     * @return
     */
    int updateHousingConfig(Map<String, Object> params);

    /**
     * 根据 采购单编号 查询出装修计划编号
     *
     * @param buyerId
     * @return
     */
    Map<String, Object> getBuyerMainByBuyerId(String buyerId);

    /**
     * 根据备件采购单的主编号获得所有采购单详表中的编号信息
     *
     * @param buyerId
     * @return
     */
    List<Integer> selectStocketBuyerInfoIds(String buyerId);


    /**
     * 查询价格 通过采购单主编号 为了生成结算表记录
     *
     * @param buerId
     * @return
     */
    List<Map<String, Object>> selectBuyerInfoForCreateSettment(String buerId);

    /**
     * 获取装修计划详表数据通过采购单编号
     *
     * @param buyId
     * @return
     */
    List<Map<String, Object>> selectPlanInfoListByBuyerId(String buyId);

}
